package com.qk.controller;

import com.qk.common.PageResult;
import com.qk.common.Result;
import com.qk.entity.Dept;
import com.qk.service.DeptService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@Slf4j
@RequestMapping("/depts")
@RestController     // 类上，标识当前类是【一个请求处理器】，也是【controller层bean】   = @Controller + @ResponseBody
public class DeptController {
    @Autowired
    private DeptService deptService;

    // 1. 分页查询 -- 当参数为空字符串时，即为查询所有，此时所有数据都会显示，也就完成了列表展示
    @GetMapping
    public Result list(String name, Integer status,
                       @RequestParam(defaultValue = "1") Integer page,  // @RequestParam：1.接收查询参数  2. 为参数设置默认值  @RequestParam("name") String name
                       @RequestParam(defaultValue = "10") Integer pageSize) {   // 当【前端请求参数名】 == 【方法形参名】时，可以省略@RequestParam("name")
        log.info("条件分页查询部门: name={}, status={}, page={}, pageSize={}", name, status, page, pageSize);
        PageResult<Dept> pageResult = deptService.list(name, status, page, pageSize);
        return Result.success(pageResult);
    }

    // 2. 增
    @PostMapping
    public Result add(@RequestBody Dept dept) { // @RequestBody：将前端成传来的json封装为对象    多见于【增】【改】
        log.info("【新增部门】dept:{}", dept);
        deptService.add(dept);
        return Result.success();
    }

    // 3. 删
    @DeleteMapping("/{id}")
    public Result deleteById(@PathVariable Integer id) {
        log.info("删除部门: {}" , id);
        deptService.deleteById(id);
        return Result.success();
    }

    /**
     * 【修改部门】设计两个接口：
     * - 第一个接口是 根据ID查询部门数据的接口。
     * - 第二个接口是 修改部门数据的接口。
     * <p>
     * 1. 根据ID查询部门【查询回显】
     */
    @GetMapping("/{id}")
    public Result getById(@PathVariable Integer id) {   // @PathVariable 是 Spring MVC 中的一个注解，主要用于将 URL 中的路径变量绑定到方法参数上
        log.info("根据ID查询部门: {}" , id);
        Dept dept = deptService.getById(id);
        return Result.success(dept);
    }

    /**
     * 2. 修改部门
     */
    @PutMapping
    public Result update(@RequestBody Dept dept) {
        log.info("修改部门: {}" , dept);
        deptService.update(dept);
        return Result.success();
    }

    // 查询所有部门
    @GetMapping("/list")
    public Result list() {
        log.info("查询所有部门");
        return Result.success(deptService.list());
    }

}
